﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WCFVeterinaria;

public partial class Usuarios : System.Web.UI.Page
{
    ServiceVeterinaria vet = new ServiceVeterinaria();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["username"] == null)
        {
            GridUsers.Visible = false;
        }
        if (!IsPostBack)
        {
            CargarUsuarios();
        }
    }

    private void CargarUsuarios()
    {
        UsuariosGridView.DataSource = vet.listarUsuarios();
        UsuariosGridView.DataBind();
    }


    protected void AgregarButton_Click(object sender, EventArgs e)
    {
        string correo = IdUsuarioTextBox.Text;
        string password = Utils.Encriptar(PasswordTextBox.Text);
        string nombre = NombreTextBox.Text;
        string apellido = ApellidosTextBox.Text;
        string identificacion = IdentificacionTextBox.Text;
        try
        {
            vet.agregarUsuario(correo, password, nombre, apellido, identificacion);


            if (Session["username"] == null)
            {
                ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", "alert('Usuario creado con éxito'); window.open('Login.aspx');", true);

            }
            else
            {
                ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", "alert('Usuario creado con éxito')", true);
                CargarUsuarios();
                LimpiarCampos();
            }
        }
        catch (Exception)
        {
            string message = "alert('Hubo un error al insertar, intente más luego')";
            ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", message, true);
        }
    }

    private void LimpiarCampos()
    {
        IdUsuarioTextBox.Text = PasswordTextBox.Text = NombreTextBox.Text = ApellidosTextBox.Text = IdentificacionTextBox.Text = string.Empty;
    }

    protected void UsuariosGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType != DataControlRowType.DataRow)
            return;

        DataRowView item = (DataRowView)(e.Row.DataItem);


        // if editing row
        if (((GridView)sender).EditIndex != e.Row.RowIndex)
        {
            string idRegister = Convert.ToString(item.Row["idUsuario"]);
            HiddenField idRegisterHiddenField = (HiddenField)e.Row.FindControl("IdRegisterHiddenField");
            idRegisterHiddenField.Value = idRegister;

            ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[0])).Text = "Editar";
            ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[2])).Text = "Eliminar";
            ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[2])).Attributes.Add("onclick", "return ConfirmDelete();");

            if (String.IsNullOrEmpty(idRegister))
            {
                ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[0])).Visible = false;
                ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[2])).Visible = false;
            }

            Label correoEditarLabel = (Label)e.Row.FindControl("CorreoEditarLabel");
            Label passwordEditarLabel = (Label)e.Row.FindControl("PasswordEditarLabel");
            Label nombreEditarLabel = (Label)e.Row.FindControl("NombreEditarLabel");
            Label identificacionEditarLabel = (Label)e.Row.FindControl("IdentificacionEditarLabel");

            nombreEditarLabel.Text = Convert.ToString(item.Row["nombre"]) + " " + Convert.ToString(item.Row["apellido"]);
            correoEditarLabel.Text = Convert.ToString(item.Row["idUsuario"]);
            passwordEditarLabel.Text = Convert.ToString(item.Row["password"]).Replace(Convert.ToString(item.Row["password"]), "********");
            identificacionEditarLabel.Text = Convert.ToString(item.Row["identificacion"]);
        }
        else
        {
            ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[0])).Text = "Guardar";
            ((System.Web.UI.WebControls.LinkButton)(e.Row.Cells[0].Controls[2])).Text = "Cancelar";

            string idRegister = Convert.ToString(item.Row["idUsuario"]);
            HiddenField idRegisterHiddenField = (HiddenField)e.Row.FindControl("IdRegisterHiddenField");
            idRegisterHiddenField.Value = idRegister;
            IdUsuarioHiddenField.Value = idRegister.ToString();


            TextBox correoEditarTextBox = (TextBox)e.Row.FindControl("CorreoEditarTextBox");
            TextBox passwordEditarTextBox = (TextBox)e.Row.FindControl("PasswordEditarTextBox");
            TextBox nombreEditarTextBox = (TextBox)e.Row.FindControl("NombreEditarTextBox");
            TextBox apellidoEditarTextBox = (TextBox)e.Row.FindControl("ApellidoEditarTextBox");
            TextBox identificacionEditarTextBox = (TextBox)e.Row.FindControl("IdentificacionEditarTextBox");

            nombreEditarTextBox.Text = Convert.ToString(item.Row["nombre"]);
            apellidoEditarTextBox.Text = Convert.ToString(item.Row["apellido"]);
            correoEditarTextBox.Text = Convert.ToString(item.Row["idUsuario"]);
            passwordEditarTextBox.Attributes.Add("value", Convert.ToString(item.Row["password"]));
            identificacionEditarTextBox.Text = Convert.ToString(item.Row["identificacion"]);
        }
    }
    protected void UsuariosGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        DeleteRegister(e);
        // terminate editing mode ...
        UsuariosGridView.EditIndex = -1;
        IdUsuarioHiddenField.Value = string.Empty;
        // search again
        CargarUsuarios();
    }
    protected void UsuariosGridView_RowEditing(object sender, GridViewEditEventArgs e)
    {
        UsuariosGridView.EditIndex = e.NewEditIndex;
        CargarUsuarios();
    }
    protected void UsuariosGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        UpdateRegister(e);
        // terminate editing mode ...
        UsuariosGridView.EditIndex = -1;
        // search again
        CargarUsuarios();
    }
    protected void UsuariosGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        UsuariosGridView.EditIndex = -1;
        IdUsuarioHiddenField.Value = string.Empty;
        // search again
        CargarUsuarios();
    }
    protected void UsuariosGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        UsuariosGridView.PageIndex = e.NewPageIndex;
        CargarUsuarios();
    }


    private void UpdateRegister(GridViewUpdateEventArgs e)
    {

        GridViewRow row = UsuariosGridView.Rows[e.RowIndex];
        string correo = ((HiddenField)row.FindControl("IdRegisterHiddenField")).Value;
        string nombre = ((TextBox)row.FindControl("NombreEditarTextBox")).Text;
        string apellido = ((TextBox)row.FindControl("ApellidoEditarTextBox")).Text;
        string correo2 = ((TextBox)row.FindControl("CorreoEditarTextBox")).Text;
        string password = ((TextBox)row.FindControl("PasswordEditarTextBox")).Text;
        string identificacion = ((TextBox)row.FindControl("IdentificacionEditarTextBox")).Text;


        //// edit user

        try
        {
            string passwordEnc = Utils.Encriptar(password);
            vet.actualizarUsuario(correo2, correo, passwordEnc, nombre, apellido, identificacion);
            string message = "alert('Usuario actualizado con éxito')";
            ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "alert", message, true);
            //Response.Redirect(Request.RawUrl);
        }
        catch (Exception)
        {
            string message = "alert('Error al actualizar usuario, intente más tarde')";
            ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "alert", message, true);
            return;
        }


    }


    private void DeleteRegister(GridViewDeleteEventArgs e)
    {
        // get data
        GridViewRow row = UsuariosGridView.Rows[e.RowIndex];
        HiddenField idRegisterHiddenField = (HiddenField)row.FindControl("IdRegisterHiddenField");
        string idUser = idRegisterHiddenField.Value;

        try
        {
            vet.eliminarUsuario(idUser);
            string message = "alert('Se borró el registro con éxito')";
            ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "alert", message, true);
            //Response.Redirect(Request.RawUrl);
        }

        catch
        {
            string message = "alert('Error al borrar usuario, intente más tarde')";
            ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "alert", message, true);
            return;
        }
    }


}